<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

	<head>
		<title>Play! - Official Documentation</title>
		<style type="text/css">
			table
			{
				border: 1px outset black;
			}
			
			td
			{
				border: 1px inset black;
			}
			
			table.comp
			{
				width: 100%;
			}
			
			table.ext
			{
				width: 100%;
			}
			
			table.ctrl
			{
				width: 100%;
			}
			
			td.ctrl_header
			{
				width: 50%;
				text-align: center;
				text-decoration: underline;
			}
			
			td.comp_header
			{
				width: 50%;
				text-align: center;
				text-decoration: underline;
			}
						
			td.comp_header
			{
				width: 50%;
				text-align: center;
				text-decoration: underline;
			}

		</style>
		
	</head>
	
	<body>
		
		<h1>Play! - Official Documentation</h1>
		
		<div>
			<h2>Table of Contents</h2>
			
			<ul>
				<li><a href="#disclaimer">Disclaimer</a></li>
				<li><a href="#whatsthis">What's this?</a></li>
				<li><a href="#requirements">System Requirements</a></li>
				<li><a href="#features">Technical Features</a></li>
				<li><a href="#guide">Basic User Guide</a>
					<ul>
					    <li><a href="#home_directory">Home Directory</a></li>
						<li><a href="#guide_playing">Playing a Game</a></li>
						<li><a href="#guide_controls">Game Controls</a></li>
						<li><a href="#guide_state">State Saving/Loading</a></li>
					</ul>
				</li>
				<li><a href="#ext">OpenGL Extensions</a></li>
				<li><a href="#comp">Compatibility</a></li>
				<li><a href="#contact">Contact Information</a></li>
				<li><a href="#greetings">Special Thanks/Greetings</a></li>
			</ul>
			
		</div>
		
		<hr />
		
		<div>
		
			<h2 id="disclaimer">Discalimer</h2>
			
			<p>
			
				This PlayStation 2 emulator is provided as is with absolutely no garantees.
				<br /><br />
				The author takes no responsability for any damage/loss caused by the use of this emulator.
				<br /><br />
				You are not allowed to sell this emulator.
			
			</p>

		</div>
		
		<hr />
		
		<div>
			
			<h2 id="whatsthis">What's this?</h2>

			<p>

				Play! is a PlayStation 2 console emulator still in preliminary stages. This won't run your favorite 
				PlayStation 2 game perfectly at optimal speed: this only works with a few demos and games created by 
				people involved in the non-professional PS2 coding scene.

			</p>		

		</div>

		<hr />
		
		<div>

			<h2 id="requirements">System Requirements</h2>
			
		    <ul>
		        <li>OS: Windows XP/Vista/7/8/8.1/10</li>
		        <li>CPU: x86 SSSE3 CPU running @ 2.0GHz and + is recommended.</li>
		        <li>RAM: 256MBs of RAM is recommended.</li>
		        <li>Video Card: Any DirectX9 class GPU should be enough.</li>
			<li>Note: Play! doesn't take advantage of multi-core CPUs yet.</li>
		    </ul>
			
		</div>
		
		<hr />
		
		<div>
		
			<h2 id="features">Technical Features</h2>
			
			<ul>
				<li>EmotionEngine:
					<ul>
						<li>Near complete emulation of the base MIPSIV core.</li>
						<li>Good COP0 (System Control Unit) / COP1 (Floating Point Unit) emulation.</li>
						<li>Fair emulation of the MMI instruction subset.</li>
						<li>CPU emulation done using an instruction caching/recompilation scheme.</li>
					</ul>
				</li>

				<li>OS:
					<ul>
						<li>ELF binaries loading support.</li>
						<li>BIOS emulation done in high-level</li>
					</ul>
				</li>
				
				<li>GS/GIF:
					<ul>
						<li>Basic GIF transfers implemented.</li>
						<li>Basic GS registers emulation.</li>
						<li>Basic GS rendering supported (using OpenGL).</li>
					</ul>
				</li>
				
				<li>VU/VIF:
					<ul>
						<li>Micromode support for the VU0/VU1.</li>
						<li>Macromode support for the VU0.</li>
						<li>Basic VIF transfers implemented.</li>
						<li>VU flags emulation not very well supported.</li>
					</ul>
				</li>
		
				<li>IPU:
					<ul>
						<li>MPEG-1/2 macroblock decoding supported.</li>
						<li>All commands emulated.</li>
						<li>Still very buggy, so it won't playback movies really well.</li>
					</ul>
				</li>
				
				<li>IOP/SIF:
					<ul>
						<li>High-level emulation of the IO processor done by intercepting SIF commands and routing them to native modules.</li>
						<li>Common IOP modules emulated in high-level.</li>
						<li>Can load and execute game specific IOP modules.</li>
					</ul>
				</li>
				
			</ul>
			
		</div>
		
		<hr />
		
		<div>
		
			<h2 id="guide">Basic User Guide</h2>

            <h3 id="home_directory">Home Directory</h3>
            
            <p>
                The first time you'll be running the emulator, it'll create a new "Play Data Files" folder in your "My Documents" folder.
                This is going to be the place where the emulator will store saved games and also the place where it will look for homebrewn games data files.
            </p>
            
			<h3 id="guide_playing">Playing a Game</h3>
			
		    <p>
				To play an homebrewn game or demo, follow these steps: 
		    </p>
		    
		    <ul>
				<li>Extract the contents of the archive containing the game or demo data into the "/vfs/host" subdirectory of the home directory.</li>
				<li>In the emulator, select "File | Load ELF..." from the menu bar.</li>
				<li>Select the ELF executable image file that should have been extracted in the "/vfs/host" directory.</li>
				<li>After a successful loading, the virtual machine will start executing the program.</li>
			</ul>
			
			<p>
				To play a commercial game on a DVD-ROM or in a disk image in raw ISO9660 format (.iso file), follow these steps:
			</p>
			
			<ul>
				<li>
					Configure the source that will be used for the disk data by selecting "Options | Virtual File System Manager..." from the menu bar
					and double clicking on the "cdrom0" device.
					<ul>
						<li>
							If you want to use a physical DVD-ROM, click the "Physical CD/DVD Reader Device" radio button
						    and select the drive that'll be containing the disk in the combo box below.
						</li>
						<li>
							If you have a disk image, click the "ISO9660 Disk Image" radio button and select your image file by clicking the "..." button.
						</li>
						<li>
							Confirm your changes and go back to the main window.
						</li>
					</ul>
				</li>
				<li>Select "File | Boot cdrom0" from the menu bar.</li>
				<li>After a successful loading, the virtual machine will start executing the program.</li>
				<li>Note: You can also use the "File | Boot Disk Image..." to load a disk image file directly.</li>
			</ul>
		    
		    <h3 id="guide_controls">Game Controls</h3>

			<p>
				You can change your controller configuration by selecting "Options | Controller Settings...". It's possible to use either your keyboard
				or your DirectInput compatible game controller to bind with the Dual Shock controller keys. The default config is this one:
			</p>
			
			<table class="ctrl">
				<tr>
					<td class="ctrl_header">Dual Shock Controller Button</td>
					<td class="ctrl_header">Keyboard Equivalent</td>
				</tr>
				<tr>
					<td>Left (d-pad)</td>
					<td>Left Arrow</td>
				</tr>
				<tr>
					<td>Right (d-pad)</td>
					<td>Right Arrow</td>
				</tr>
				<tr>
					<td>Up (d-pad)</td>
					<td>Up Arrow</td>
				</tr>
				<tr>
					<td>Down (d-pad)</td>
					<td>Down Arrow</td>
				</tr>
				<tr>
					<td>Square</td>
					<td>A</td>
				</tr>
				<tr>
					<td>Cross (X)</td>
					<td>Z</td>
				</tr>
				<tr>
					<td>Triangle</td>
					<td>S</td>
				</tr>
				<tr>
					<td>Circle</td>
					<td>X</td>
				</tr>
				<tr>
					<td>Start</td>
					<td>Return</td>
				</tr>
				<tr>
					<td>Select</td>
					<td>Left or Right Shift</td>
				</tr>
			</table>

			<h3 id="guide_state">State Saving/Loading</h3>
			
			<p>
				To save a state, simply press F7 or select the "Virtual Machine | Save State" menu item.
				To load a previously saved state, press F8 or select the "Virtual Machine | Load State" menu item. There's also 10 slots
				available for you to place your saved states in, accessible through the "Virtual Machine | State Slot" submenu. Please note that
				saved states aren't very stable and could result in data loss. Prefer using the game's save mechanism if it's available.
			</p>
			
		</div>
		
		<hr />
		
		<div>
		
			<h2 id="ext">OpenGL Extensions</h2>
			
			<p>
			
				The current GS handler requires some OpenGL extensions in order to emulate some features of the GS correctly. 
				To check which extensions are supported by your video card driver, consult the "Renderer Settings" dialog in the emulator. 
				The following table lists which extensions are currently being used and what might be the consequences 
				if your video card driver do not support them.
			
			</p>
			
			<table class="ext">
				<tr>
					<td class="comp_header">Extension</td>
					<td class="comp_header">Absence Effect</td>
				</tr>
				<tr>
					<td>glBlendColor function</td>
					<td>Used for "Ys I &amp; II: Eternal Story". Some elements of the game that should appear translucent will appear opaque.</td>
				</tr>
				<tr>
					<td>glBlendEquation function</td>
					<td>Used for "Ys I &amp; II: Eternal Story". Some elements of the game that should appear translucent will appear opaque.</td>
				</tr>
				<tr>
					<td>glColorTable function</td>
					<td>Used for "Ys I &amp; II: Eternal Story". Textures need to be converted to the RGBA8888 format resulting in a slow down.</td>
				</tr>
				<tr>
					<td>GL_UNSIGNED_SHORT_1_5_5_5_REV texture format</td>
					<td>Used for "Lobotomia". Textures need to be converted to the RGBA8888 format resulting in a slow down.</td>
				</tr>
			</table>
			
		</div>
		
		<hr />
		
		<div>
		
			<h2 id="comp">Compatibility</h2>
			
			<p>
				The following table lists the games I've tested with the emulator and the status of thier support. 
				Please note that sound isn't considered in this compatibility list.
			</p>
			
			<table class="comp">
				<tr>
					<td class="comp_header">Game/Demo</td>
					<td class="comp_header">Compatibility Status</td>
				</tr>
				<tr>
					<td class="comp_header" colspan="2">Commercial Games</td>
				</tr>
				<tr>
					<td>Akumajou Dracula - Yami no Juin (SLPM_661.75)</td>
					<td>
						<ul>
							<li>Deadlocks occuring during loading screens (rare).</li>
							<li>3D broken at some places.</li>
				            <li>Use SMODE2 flipping mode.</li>
						</ul> 
					</td>
				</tr>
				<tr>
					<td>Atelier Iris - Eternal Mana (SLPM_660.81)</td>
					<td>
						<ul>
						    <li>Sluggish 3D scenes.</li>
				            <li>Use SMODE2 flipping mode.</li>
						</ul> 
					</td>
				</tr>
				<tr>
					<td>Castlevania - Lament of Innoncence (SLUS_207.33)</td>
					<td>
						<ul>
							<li>Initial menu only.</li>
				            <li>Use SMODE2 flipping mode.</li>
						</ul> 
					</td>
				</tr>
				<tr>
					<td>Final Fantasy X (SLUS_203.12)</td>
					<td>
						<ul>
						    <li>3D scenes are very slow and glitchy.</li>
				            <li>Use SMODE2 flipping mode.</li>
						</ul> 
					</td>
				</tr>
				<tr>
				    <td>Guilty Gear XX Accent Core Plus (SLPM_669.65)</td>
				    <td>
				        <ul>
				            <li>Saved games doesn't work.</li>
				            <li>Use VBLANK flipping mode.</li>
				        </ul>
				    </td>
				</tr>
				<tr>
				    <td>Half-Life (SLES_505.04)</td>
				    <td>
				        <ul>
				            <li>Saved games doesn't work.</li>
				            <li>Very sluggish and broken 3D scenes.</li>
				            <li>Use SMODE2 flipping mode.</li>
						</ul>
				    </td>
				</tr>
				<tr>
					<td>Mega Man X Collection (SLUS_213.70)</td>
					<td>
						<ul>
							<li>Initial menu only.</li>
				            <li>Use SMODE2 flipping mode.</li>
						</ul> 
					</td>
				</tr>
				<tr>
					<td>Ys I &amp; II: Eternal Story (SPLS_252.06)</td>
					<td>
						<ul>
						    <li>No particles when hitting enemies;</li>
						    <li>Flickering in some scenes.</li>
						    <li>Saved games doesn't work.</li>
				            <li>Use SMODE2 flipping mode.</li>
						</ul> 
					</td>
				</tr>
				
				<tr>
					<td class="comp_header" colspan="2">Homebrewn</td>
				</tr>
				<tr>
					<td>1987 (1987.elf)</td>
					<td>
						<ul>
				            <li>Slow.</li>
				            <li>Use VBLANK flipping mode.</li>
						</ul> 
                    </td>
				</tr>
				<tr>
					<td>By The Way (bytheway.elf)</td>
					<td>
						<ul>
				            <li>Slow.</li>
				            <li>Video output is cut in half.</li>
				            <li>Use VBLANK flipping mode.</li>
						</ul> 
                    </td>
				</tr>
				<tr>
					<td>Cube Mastah (cubemastah.elf)</td>
					<td>Broken.</td>
				</tr>
				<tr>
					<td>FiRE (FiRE.elf)</td>
					<td>Working.</td>
				</tr>
				<tr>
					<td>Lobotomia (LOBOTOM.ELF)</td>
					<td>Broken.</td>
				</tr>
				<tr>
					<td>Plasma Tunnel (plasma_tunnel.elf)</td>
					<td>Working.</td>
				</tr>
				<tr>
					<td>PS2 Invaders v1.6 (space.elf)</td>
					<td>Broken.</td>
				</tr>
				<tr>
					<td>Quake (quake.elf)</td>
					<td>Working with the version that doesn't use the USB module.</td>
				</tr>
				<tr>
					<td>Slave of the VU (slave_of_the_vu.elf)</td>
					<td>Broken.</td>
				</tr>
				<tr>
					<td>PS2 Doom</td>
		            <td>Use FBDISP2 flipping mode.</td>
				</tr>
			</table>
		</div>
		
		<hr />
		
		<div>
			
			<h2 id="contact">Contact Information</h2>
			
			<p>
				e-mail: <a href="mailto:jean-philip.desjardins@polymtl.ca">jean-philip.desjardins@polymtl.ca</a>
				<br />
				WWW: <a href="http://purei.org">http://purei.org</a>
				<br />
				Forums: <a href="http://forum.purei.org">http://forum.purei.org</a>
			</p>
			
		</div>
		
		<hr />
		
		<div>
			<h2 id="greetings">Special Thanks/Greetings</h2>
			
			<p>
				<a href="http://ps2dev.org">ps2dev</a> (great source for technical info/demos/source code), <a href="http://boost.org">boost</a>, <a href="http://zlib.net">zlib</a>, <a href="http://bzip.org/">bzip2</a>, Valnyan, Charles Verdon, Eric Bernard, 
				Brian Guthrie, thrended.
			</p>
			
		</div>
		
	</body>

</html>
